pull: Set an error when we get an unsuccessful HTTP response
authorColin Walters <walters@verbum.org>
Wed, 22 Aug 2012 23:40:45 +0000 (19:40 -0400)
committerColin Walters <walters@verbum.org>
Wed, 22 Aug 2012 23:45:00 +0000 (19:45 -0400)
Otherwise we'll e.g. try to parse 404 HTML as an object which will
fail.

src/ostree/ostree-fetcher.c

index dcabf6eb8b05fc3b898bbe7e2b4350a5663be4c4..3ef6e7e75c0645b83b0925a1b297f071d8d10ad2 100644 (file)
@@ -187,15 +187,26 @@ on_request_sent (GObject        *object,
 {
   OstreeFetcherPendingURI *pending = user_data;
   GError *local_error = NULL;
+  ot_lobj SoupMessage *msg = NULL;
 
   pending->request_body = soup_request_send_finish ((SoupRequest*) object,
                                                    result, &local_error);
+  msg = soup_request_http_get_message ((SoupRequestHTTP*) object);
+
   if (!pending->request_body)
     {
       pending->state = OSTREE_FETCHER_STATE_COMPLETE;
       g_simple_async_result_take_error (pending->result, local_error);
       g_simple_async_result_complete (pending->result);
     }
+  else if (!SOUP_STATUS_IS_SUCCESSFUL (msg->status_code))
+    {
+      g_set_error (&local_error, G_IO_ERROR, G_IO_ERROR_FAILED,
+                   "Server returned status %u: %s",
+                   msg->status_code, soup_status_get_phrase (msg->status_code));
+      g_simple_async_result_take_error (pending->result, local_error);
+      g_simple_async_result_complete (pending->result);
+    }
   else
     {
       GOutputStreamSpliceFlags flags = G_OUTPUT_STREAM_SPLICE_CLOSE_TARGET;